home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / cisco / account.shar / ciscotalk.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-07  |  2.0 KB  |  134 lines

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <netdb.h>
  6.  
  7. #include "ciscotalk.h"
  8.  
  9. extern char *index();
  10. extern char *optarg;
  11. extern int optind;
  12.  
  13. char host[255] = SERVER;
  14. char lbuf[80];
  15. char verbose = 0;
  16.  
  17.  
  18. /*   1.1 90/02/07 dfk@cwi.nl */
  19.  
  20. main(argc, argv)
  21. int argc; char **argv;
  22. {
  23.  
  24.     register int i;
  25.     register int s;
  26.     char c;
  27.     struct sockaddr_in sin;
  28.     struct hostent *hp;
  29.     struct servent *sp;
  30.     register FILE *socks;
  31.  
  32.     while ((i=getopt(argc, argv, "vh:")) != EOF)
  33.     {
  34.         switch(i)
  35.         {
  36.         case 'h':
  37.             strncpy(host, optarg, sizeof(host));
  38.             break;
  39.  
  40.         case 'v':
  41.             verbose++;
  42.             break;
  43.  
  44.         case '?':
  45.             fprintf(stderr, "usage: ciscotalk [-h host]\n");
  46.             exit(1);
  47.         }
  48.     }
  49.  
  50.     if ((hp=gethostbyname(host)) == NULL)
  51.     {
  52.         fprintf(stderr, "ciscotalk: %s unknown\n", host);
  53.         exit(1);
  54.     }
  55.  
  56.     if ((s=socket(hp->h_addrtype, SOCK_STREAM, 0)) <0)
  57.     {
  58.         perror("ciscotalk: cannot create socket");
  59.         exit(1);
  60.     }
  61.  
  62.     if ((sp=getservbyname("telnet", "tcp")) == NULL)
  63.     {
  64.         fprintf(stderr, "ciscotalk: can't find service\n");
  65.         exit(1);
  66.     }
  67.  
  68.     sin.sin_family = hp->h_addrtype;
  69.     bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
  70.     sin.sin_port = sp->s_port;
  71.  
  72.     if (verbose)
  73.         fprintf(stderr, "connecting to %s ...\n\n", hp->h_name);
  74.  
  75.     if (connect(s, &sin, sizeof (sin), 0) < 0) 
  76.     {
  77.         perror("ciscotalk: connect");
  78.         exit(1);
  79.     }
  80.  
  81.     if ((socks= fdopen(s, "r")) == NULL)
  82.     {
  83.         perror("ciscotalk: fdopen");
  84.         exit(0);
  85.     }
  86.  
  87.         sleep(1);
  88.         write(s, "\r\n", 2);
  89.         readcmd(socks);
  90.         while(read(0, &c, 1) == 1)
  91.         {
  92.             if (c == '\n')
  93.             {
  94.                 write(s, "\r\n", 2);
  95.                 readcmd(socks);
  96.             }
  97.             else
  98.                 write(s, &c, 1);
  99.         }
  100.         exit(0);
  101. }
  102.  
  103. readcmd(fd)
  104. FILE *fd;
  105. {
  106.         while (fgets(lbuf, sizeof(lbuf)-1, fd) !=NULL)
  107.         {
  108.             fputs(lbuf, stdout);
  109.             if (   occurs(lbuf, PROMPT1) 
  110.                 || occurs(lbuf, PROMPT2)
  111.                 || occurs(lbuf, PROMPT3)
  112.                )
  113.             {
  114.                 fflush(stdout);
  115.                 return;
  116.             }
  117.         }
  118.         fflush(stdout);
  119. }
  120.  
  121. occurs(str, pat)
  122. char *str, *pat;
  123. {
  124.     register char *point = str;
  125.  
  126.     while (point=index(point, *pat))
  127.     {
  128.         if (strncmp(point, pat, strlen(pat)) == 0)
  129.             return(1);
  130.         point++;
  131.     }
  132.     return(0);
  133. }
  134.